package com.gaogzhen.designPattern.guardedSuspension;

/**
 * 消息传递类
 */
public class GuardedObject {
    private Object response;

    /**
     * 获取响应结果
     * @return  Object 响应结果
     */
    public synchronized Object get() {
        while (response == null) {
            // 如果响应结果为空，当前线程等待
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return response;
    }

    /**
     * 设置响应结果
     * @param o
     */
    public synchronized void set(Object o) {
        if (o != null) {
            // 参数不为空，给响应结果赋值，同时唤醒等待（wait）等待的线程
            response = o;
            this.notifyAll();
        }
    }
}
